var express = require('express');
var router = express.Router();

const address = require("../controller/address");
const auth = require("../controller/auth");

//增加地址
/**
 * @openapi
 * /address/add:
 *   post:
 *     tags:
 *       - Addresses
 *     summary: 新增地址
 *     description: 此接口允许用户添加新的地址。
 *     security:
 *       - bearerAuth: []
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               userId:
 *                 type: string
 *                 description: 用户ID
 *               name:
 *                 type: string
 *                 description: 收件人姓名
 *               addressLine1:
 *                 type: string
 *                 description: 地址行1
 *               addressLine2:
 *                 type: string
 *                 description: 地址行2
 *               city:
 *                 type: string
 *                 description: 城市
 *               stateProvince:
 *                 type: string
 *                 description: 州/省
 *               postalCode:
 *                 type: string
 *                 description: 邮政编码
 *               country:
 *                 type: string
 *                 description: 国家
 *               phoneNumber:
 *                 type: string
 *                 description: 电话号码
 *     responses:
 *       200:
 *         description: 新增地址成功
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   description: 操作成功的消息
 *                 result:
 *                   type: object
 *                   properties:
 *                     affectedRows:
 *                       type: integer
 *                       description: 受影响的行数
 *       401:
 *         description: 未授权访问，只有登录的用户可以访问此接口
 *       400:
 *         description: 请求格式错误或数据不完整
 */
router.post('/add', auth.isLogin, address.add);

// 获取个人地址列表
/**
 * @openapi
 * /address/findAllSelf:
 *   get:
 *     tags:
 *       - Addresses
 *     summary: 获取个人地址列表
 *     description: 此接口允许已登录用户获取他们的个人地址列表。
 *     security:
 *       - BearerAuth: []
 *     parameters:
 *       - in: query
 *         name: limit
 *         schema:
 *           type: integer
 *         description: 可选参数，限制返回的地址数量，默认为-1表示无限制
 *       - in: query
 *         name: offset
 *         schema:
 *           type: integer
 *         description: 可选参数，偏移量，用于分页，默认为-1表示从第一条开始
 *     responses:
 *       200:
 *         description: 获取个人地址列表成功
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 status:
 *                   type: number
 *                   description: 状态码，200表示成功
 *                 message:
 *                   type: string
 *                   description: 操作成功信息
 *                 data:
 *                   type: array
 *                   items:
 *                     $ref: '#/components/schemas/Address'
 *       401:
 *         description: 未授权访问，需要用户登录
 *       400:
 *         description: 请求格式错误或数据不完整
 */
router.get('/findAllSelf', auth.isLogin, address.findAllSelf);

// 获取所有地址
/**
 * @openapi
 * /address/findAll:
 *   get:
 *     tags:
 *       - Addresses
 *     summary: 获取所有地址列表
 *     description: 此接口允许管理员获取所有用户的地址列表。
 *     security:
 *       - BearerAuth: []
 *     parameters:
 *       - in: query
 *         name: limit
 *         schema:
 *           type: integer
 *         description: 可选参数，限制返回的地址数量，默认为-1表示无限制
 *       - in: query
 *         name: offset
 *         schema:
 *           type: integer
 *         description: 可选参数，偏移量，用于分页，默认为-1表示从第一条开始
 *     responses:
 *       200:
 *         description: 获取所有地址列表成功
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 status:
 *                   type: number
 *                   description: 状态码，200表示成功
 *                 message:
 *                   type: string
 *                   description: 操作成功信息
 *                 data:
 *                   type: array
 *                   items:
 *                     $ref: '#/components/schemas/Address'
 *       401:
 *         description: 未授权访问，需要用户登录
 *       403:
 *         description: 访问被禁止，需要管理员权限
 *       400:
 *         description: 请求格式错误或数据不完整
 */
router.get('/findAll', auth.isLogin, auth.isAdmin, address.findAll);

//删除地址
/**
 * @openapi
 * /address/{id}/remove:
 *   delete:
 *     tags:
 *       - Addresses
 *     summary: 删除地址
 *     description: 此接口允许用户删除自己的地址。
 *     security:
 *       - bearerAuth: []
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         description: 地址ID
 *         schema:
 *           type: string
 *     responses:
 *       200:
 *         description: 删除地址成功
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   description: 操作成功的消息
 *                 affectedRows:
 *                   type: integer
 *                   description: 受影响的行数
 *       401:
 *         description: 未授权访问，只有登录的用户可以访问此接口
 *       404:
 *         description: 地址ID不存在
 *       500:
 *         description: 服务器内部错误
 */
router.delete('/:id/remove', auth.isLogin, address.remove);

//修改地址
/**
 * @openapi
 * /address/{id}:
 *   patch:
 *     tags:
 *       - Addresses
 *     summary: 更新地址
 *     description: 此接口允许用户更新自己的地址信息。
 *     security:
 *       - bearerAuth: []
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         description: 地址ID
 *         schema:
 *           type: string
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               name:
 *                 type: string
 *                 description: 收件人姓名
 *               addressLine1:
 *                 type: string
 *                 description: 地址行1
 *               addressLine2:
 *                 type: string
 *                 description: 地址行2
 *               city:
 *                 type: string
 *                 description: 城市
 *               stateProvince:
 *                 type: string
 *                 description: 州/省
 *               postalCode:
 *                 type: string
 *                 description: 邮政编码
 *               country:
 *                 type: string
 *                 description: 国家
 *               phoneNumber:
 *                 type: string
 *                 description: 电话号码
 *     responses:
 *       200:
 *         description: 更新地址成功
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   description: 操作成功的消息
 *                 changes:
 *                   type: integer
 *                   description: 受影响的行数
 *       401:
 *         description: 未授权访问，只有登录的用户可以访问此接口
 *       404:
 *         description: 地址ID不存在
 *       400:
 *         description: 请求格式错误或数据不完整
 */
router.patch('/:id', auth.isLogin, address.update);

//设置默认地址
/**
 * @openapi
 * /address/{id}/setDefault:
 *   patch:
 *     tags:
 *       - Addresses
 *     summary: 设置默认地址
 *     description: 此接口允许用户将指定的地址设置为默认地址。
 *     security:
 *       - bearerAuth: []
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         description: 地址ID
 *         schema:
 *           type: string
 *     responses:
 *       200:
 *         description: 设置默认地址成功
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   description: 操作成功的消息
 *                 result:
 *                   type: object
 *                   properties:
 *                     success:
 *                       type: boolean
 *                       description: 操作是否成功
 *       401:
 *         description: 未授权访问，只有登录的用户可以访问此接口
 *       404:
 *         description: 地址ID不存在或无法设置为默认地址
 *       500:
 *         description: 服务器内部错误
 */
router.patch('/:id/setDefault', auth.isLogin, address.setDefaultAddress);

//查找指定id的地址
/**
 * @openapi
 * /address/{id}/find:
 *   get:
 *     tags:
 *       - Addresses
 *     summary: 查找指定地址的信息
 *     description: 此接口允许用户查找自己指定的地址信息。
 *     security:
 *       - bearerAuth: []
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         description: 地址ID
 *         schema:
 *           type: string
 *     responses:
 *       200:
 *         description: 查找地址成功
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   description: 操作成功的消息
 *                 data:
 *                   type: object
 *                   properties:
 *                     // 地址信息字段...
 *       401:
 *         description: 未授权访问，只有登录的用户可以访问此接口
 *       404:
 *         description: 地址ID不存在或没有找到匹配的地址
 */
router.get('/:id/find', auth.isLogin, address.find);


module.exports = router;
